package co.gov.medellin.ssti.sub.model.dao.impl;

import java.util.HashMap;
import java.util.Map;

import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;

import co.gov.medellin.ssti.sub.model.dao.GrupoFamiliarDAO;

public class GrupoFamiliarDAOImpl2 extends NamedParameterJdbcDaoSupport
		implements GrupoFamiliarDAO {

	private static final String SELECT_MAX_CODIGO = "SELECT MAX(codigo) max_codigo FROM TCS_BEN_GRUPO_FAMILIAR";

	private static final String INSERT = "INSERT INTO TCS_BEN_GRUPO_FAMILIAR "
			+ " (CODIGO, BEN_CODIGO,NOMBRE,CODIGO_USUARIO, "
			+ " usuario_crea,terminal_crea, fecha_crea,usuario_modifica,terminal_modifica,fecha_modifica) "
			+ " VALUES (SCS_BEN_GF.NextVal, :BEN_CODIGO, :NOMBRE, :CODIGO_USUARIO, :usuario_crea, :terminal_crea, TO_DATE(:fecha_crea,'dd/mm/rrrr'), :usuario_modifica, :terminal_modifica,TO_DATE(:fecha_modifica,'dd/mm/rrrr'))";

	private static final String INSERT_BEN_BENEF_GRUPO_FAMILIAR = "INSERT INTO TCS_BEN_BENEF_GRUPO_FAMILIAR "
			+ " (CODIGO, GF_CODIGO, BEN_CODIGO,VFL_CODIGO_PARENTESCO) "
			+ " VALUES (SCS_BEN_BGF.NextVal, :GF_CODIGO, :BEN_CODIGO, :VFL_CODIGO_PARENTESCO)";

	private static final String ASIGNAR_GRUPO_FAMILIAR_A_BENEFICIARIO = "INSERT INTO TCS_BEN_BENEF_GRUPO_FAMILIAR "
			+ "(CODIGO, GF_CODIGO, BEN_CODIGO,VFL_CODIGO_PARENTESCO, "
			+ "usuario_crea,terminal_crea, fecha_crea,usuario_modifica,terminal_modifica,fecha_modifica) "
			+ "VALUES (SCS_BEN_BGF.NextVal, :GF_CODIGO, :BEN_CODIGO, :VFL_CODIGO_PARENTESCO, :usuario_crea, :terminal_crea, TO_DATE(:fecha_crea,'dd/mm/rrrr'), :usuario_modifica, :terminal_modifica, TO_DATE(:fecha_modifica,'dd/mm/rrrr'))";

	private static final String PREFIX_NOMBRE_GF = "GF-";

	public String[] insert(Long codeCabeza, String nombre, Long codeParentezco,
			String user, String terminal, String fecha) {
		Map<String, Object> namedParameters = new HashMap<String, Object>();

		String retorno[] = new String[2];
		int numRows = 0;

		namedParameters.put("BEN_CODIGO", codeCabeza);
		namedParameters.put("NOMBRE", PREFIX_NOMBRE_GF + nombre);
		namedParameters.put("CODIGO_USUARIO", PREFIX_NOMBRE_GF + nombre);
		namedParameters.put("usuario_crea", user);
		namedParameters.put("terminal_crea", terminal);
		namedParameters.put("fecha_crea", fecha);
		namedParameters.put("usuario_modifica", user);
		namedParameters.put("terminal_modifica", terminal);
		namedParameters.put("fecha_modifica", fecha);

		numRows = getNamedParameterJdbcTemplate().update(INSERT,
				namedParameters);

		if (numRows > 0) {
			Long code = null;
			code = findMaxCode();
			if (code != null) {
				retorno[1] = code.toString();

				namedParameters.clear();
				namedParameters.put("GF_CODIGO", code);
				namedParameters.put("BEN_CODIGO", codeCabeza);
				namedParameters.put("VFL_CODIGO_PARENTESCO", codeParentezco);

				numRows = getNamedParameterJdbcTemplate().update(
						INSERT_BEN_BENEF_GRUPO_FAMILIAR, namedParameters);

				if (numRows > 0) {
					retorno[0] = "true";
				} else {
					retorno[0] = "false";
				}
			}
		}
		return retorno;
	}

	public Long findMaxCode() {
		Long maxCodigo = null;

		maxCodigo = getJdbcTemplate().queryForObject(SELECT_MAX_CODIGO,
				Long.class);
		return maxCodigo;
	}

	public boolean asignarBeneficiarioAGrupoFamiliar(Long codeBeneficiario,
			Long codeGF, Long codeParentezco, String user, String terminal,
			String fecha) {
		Map<String, Object> namedParameters = new HashMap<String, Object>();

		namedParameters.put("GF_CODIGO", codeGF);
		namedParameters.put("BEN_CODIGO", codeBeneficiario);
		namedParameters
				.put("VFL_CODIGO_PARENTESCO", codeParentezco.longValue());
		namedParameters.put("usuario_crea", user);
		namedParameters.put("terminal_crea", terminal);
		namedParameters.put("fecha_crea", fecha);
		namedParameters.put("usuario_modifica", user);
		namedParameters.put("terminal_modifica", terminal);
		namedParameters.put("fecha_modifica", fecha);

		return getNamedParameterJdbcTemplate().update(
				ASIGNAR_GRUPO_FAMILIAR_A_BENEFICIARIO, namedParameters) > 0 ? true
				: false;

	}

}
